package chapter06._03_InnerClassTest;

import java.util.Arrays;

/**
 * @Version:
 * @Description: 没有对外部类引用的内部类——静态内部类
 * @LastDate: 2020/10/4
 */
public class Test04_Static {

    public static void main(String[] args) {
        var arr = new int[10];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)Math.round(100 * Math.random());
        }

        System.out.println(Arrays.toString(arr));
        ArrayAlg.Pair p = ArrayAlg.minMax(arr);
        System.out.println("min:" + p.getMin());
        System.out.println("max:" + p.getMax());
    }
}

/*
 * 假设我们需要设计一个方法，得到一个数组的最大最小值
 * 由于这个方法需要返回两个数 所以我们可以设计一个类来返回
 * */
class ArrayAlg {
    public static Pair minMax(int[] arr) {
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;

        for (int i : arr) {
            min = Math.min(min, i);
            max = Math.max(max, i);
        }

        return new Pair(min, max);
    }
    /*
    * 1.由于此处不需要引用外部类的资源
    * 2.且minMax方法是个static
    * 综上 可以把这个内部类变成静态内部类
    * */
    public static class Pair {
        private int min;
        private int max;

        public Pair(int min, int max) {
            this.min = min;
            this.max = max;
        }

        public int getMin() {
            return min;
        }

        public int getMax() {
            return max;
        }
    }
}
/*
* 由于有可能产生名字冲突 我们可以把Pair移植到ArrayAlg内部
* 变成一个内部类
* */
/*class Pair {
    private int min;
    private int max;

    public Pair(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public int getMin() {
        return min;
    }

    public int getMax() {
        return max;
    }
}*/
